package com.hejia.bulbul.service;

import java.util.Date;
import java.util.List;

import com.hejia.alauda.entity.DayCount;
import com.hejia.alauda.utils.Pager;
import com.hejia.bulbul.entity.PopularizeStatistic;

/**
 * 用户和订单按天统计服务
 * @author hyr
 *
 */
public interface UserOrderDayStatsService {

	/**
	 * 按天统计注册用户
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<DayCount> statsDayRegisteredUser(Date startDate, Date endDate);

	/**
	 * 添加注册用户统计，已添加则更新
	 * @param dayCount	按天注册用户统计
	 */
	void addOrUpdateDayRegisteredUserStats(DayCount dayCount);

	/**
	 * 按天统计新增交易用户和交易金额
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<DayCount> statsDayNewTradeUserAndAmount(Date startDate, Date endDate);

	/**
	 * 添加新增交易用户和交易金额统计，已添加则更新
	 * @param dayCount
	 */
	void addOrUpdateDayNewTradeUserAndAmountStats(DayCount dayCount);

	/**
	 * 按天统计交易订单数
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<DayCount> statsDayOrder(Date startDate, Date endDate);

	/**
	 * 添加交易订单数统计，已添加则更新
	 * @param dayCount
	 */
	void addOrUpdateDayOrderStats(DayCount dayCount);

	/**
	 * 按天统计成功交易订单数和金额
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<DayCount> statsDaySuccessOrderAndAmount(Date startDate, Date endDate);

	/**
	 * 添加成功交易订单数和金额统计，已添加则更新
	 * @param dayCount
	 */
	void addOrUpdateDaySuccessOrderAndAmountStats(DayCount dayCount);

	/**
	 * 按天统计复投订单数和金额
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<DayCount> statsDayRepeatOrderAndAmount(Date startDate, Date endDate);

	/**
	 * 添加复投订单数和金额统计，已添加则更新
	 * @param dayCount
	 */
	void addOrUpdateDayRepeatOrderAndAmountStats(DayCount dayCount);

	/**
	 * 统计所有大类推广
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @param pager		分页
	 * @return
	 */
	Pager<PopularizeStatistic> statisticPopularizes(Date startDate, Date endDate, Pager<PopularizeStatistic> pager);

	/**
	 * 根据大类统计推广
	 * @param biggerCategoryId	大类ID
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeStatistic> statisticPopularizeByBiggerCategoryIdAndDate(Long biggerCategoryId, Date startDate, Date endDate);

	/**
	 * 根据类别统计推广
	 * @param biggerCategoryId	大类ID
	 * @param categoryId	类别ID
	 * @param startDate	开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeStatistic> statisticPopularizeByCategoryIdAndDate(Long biggerCategoryId, Long categoryId, Date startDate, Date endDate);

}
